
angular.module('smartOlwApp').controller('nucleoseduCtrl', function($scope,ngDialog,smartOlwServices){
	
	var divMessages  			= document.querySelector('#messageBox');
	    divMessages.className 	= "alert alert-info alert-dismissable";
	
	$scope.titulo_mensajes 		 = "Información!";
	$scope.descripcion_mensajes  = "En esta vista puede administrar el maestro de nucleos";
	
	$scope.nucleos				 = [];
	$scope.paises				 = [];
	$scope.departamentos		 = [];
	$scope.ciudades				 = [];
	
	
	$scope.grabar								= function(nucleo) {
		try {
			var exito 							= function(respuesta) {
				$scope.descripcion_mensajes  	= "Nucleo almacenado con éxito";
				divMessages.className 			= "alert alert-success alert-dismissable";
			};
			
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de grabar el nucleo";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			var ciudaddto						= nucleo.ciudaddto;
			    ciudaddto						= $scope.buscarCiudad(ciudaddto);
			nucleo.ciudaddto 					= $scope.ciudades[ciudaddto];
			nucleo.fhmodificacion 				= "2016-04-23";
			nucleo.cousuario 					= 1;
			nucleo.fhingreso 					= "2016-04-23";
			
			if(nucleo.scnucleoeducativo === undefined || nucleo.scnucleoeducativo === null) {
				smartOlwServices.sendPut(
					angular.toJson(nucleo),
					hostSmart+context+endPointNucleoEducativo+methodSetNucleoEducativo,exito,error
				);
			}
			else {
				smartOlwServices.sendPut(
					angular.toJson(nucleo),
					hostSmart+context+endPointNucleoEducativo+methodEditNucleoEducativo,exito,error
				);
			}
			
			nucleo.ciudaddto 				= ciudaddto;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de guardar el nucleo";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.consultar						= function(nucleo) {
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			   	   $scope.nucleos 				= lista;
				if($scope.nucleos != null && $scope.nucleos.length > 0) {
				   $scope.descripcion_mensajes  = "Tenemos " + $scope.nucleos.length + " nucleos";
				}
				else {
				   $scope.titulo_mensajes 		= "Información!";
				   $scope.descripcion_mensajes 	= "No hay nucleos registrados";	
				}
				divMessages.className 			= "alert alert-success alert-dismissable";
			};
			
			var error = function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar nucleos";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			nucleo							= (nucleo == null)?{}:nucleo;
			var ciudaddto					= (nucleo != null)?nucleo.ciudaddto:null;
			var vciudaddto					= ciudaddto;
			if(ciudaddto != null) {
			   ciudaddto					= $scope.buscarCiudad(ciudaddto);
			   nucleo.ciudaddto 			= $scope.ciudades[ciudaddto];
			}
			
			smartOlwServices.sendPost(
				angular.toJson(nucleo),
				hostSmart+context+endPointNucleoEducativo+methodFiltrarnucleoseducativos,exito,error
			);
			nucleo.ciudaddto 				= vciudaddto;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar nucleos";
			divMessages.className 			= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.seleccionar			 = function(nucleo) {
		var nucleoe				  	 = angular.copy(nucleo);
		var pernombre			 	 = nucleoe.director.dspnombre   + " " + ((nucleoe.director.dssnombre   != null)?nucleoe.director.dssnombre:"");
		var perapellido			 	 = nucleoe.director.dspapellido + " " + ((nucleoe.director.dspapellido != null)?nucleoe.director.dspapellido:"");
		   //Informacion del director...
		   $scope.directorcel		 = nucleoe.director.dsidentificacion;
		   $scope.directornombre	 = pernombre + " " + perapellido;
		   //Valor de pais de la ciudad...
		   $scope.scpais			 = nucleoe.ciudaddto.departamentodto.scpais.scpais;
		//Sino existe, es porque es necesario cargar departam...
		if($scope.buscarDepartamento(nucleoe.ciudaddto.departamentodto.scdepartamento) == -1) {
		   //Carga departamentos...
		   $scope.cargarDepartamentos();
		}
		   //Elige por defecto el departamento...
		   $scope.dsdepartamento	 = nucleoe.ciudaddto.departamentodto.scdepartamento;
		//Si no existe la ciudad, se debe cargar las ciudades...
		if($scope.buscarCiudad(nucleoe.ciudaddto.scciudad) == -1) {
		   //Carga ciudades...
		   $scope.cargarCiudades();
		}
		   //Pone por defecto la ciudad...
		   nucleoe.ciudaddto 		 = nucleoe.ciudaddto.scciudad;
		   $scope.nucleo			 = nucleoe;
	};
	
	$scope.limpiar				 = function(nucleo) {
	    divMessages.className 		= "alert alert-info alert-dismissable";
		$scope.titulo_mensajes 		= "Información!";
		$scope.descripcion_mensajes = "En esta vista puede administrar el maestro de nucleos";
		
		$scope.directorcel		 	= null;
		$scope.directornombre	 	= null;
		$scope.dsdepartamento		= null;
		$scope.scpais				= null;
		$scope.nucleos				= [];
		$scope.departamentos		= [];
		$scope.ciudades				= [];
		
		if(nucleo != null) {
		   nucleo.director		 	= null;
		   nucleo.dsnucleoeducativo = null;
		   nucleo.conucleoeducativo	= null;
		   nucleo.ciudaddto			= null;
		   nucleo.scnucleoeducativo	= null;
		}
	};
	
	$scope.showModal 			 = function() {
		var dialog 	 			 = ngDialog.open({
			template: '<div>'+
				      '   <p>En esta vista, puede crear nuevos departamentos, teniendo en cuenta los siguientes aspectos:</p>' +
					  '   <p>' + 
					  '     <ul style="list-style-type:circle;margin-left:10px;">'  +
					  '        <li>Los campos con signo *, son obligatorios, se deben diligenciar.</li>' +
					  '     </ul>' +
					  '   </p>' + 
					  '</div>'+
				      '<div class="ngdialog-buttons">'+
				      '<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Cerrar</button>' +
				      '</div>',
		    className: 'ngdialog-theme-default',
			plain: true
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.buscarDirector		 = function() {
		var texto				 			= ($scope.directorcel != "")?$scope.directorcel.trim():"";
		var exito 							= function(respuesta) {
		   var personas						= angular.fromJson(respuesta.data);
		   
		    $.each( personas, function( index, persona ) {
		    	persona.fhnacimiento		= new Date(persona.fhnacimiento);
		    	persona.dspnombre			= (persona.dspnombre != null)?persona.dspnombre:"";
		    	persona.dssnombre			= (persona.dssnombre != null)?persona.dssnombre:"";
		    	persona.dspapellido			= (persona.dspapellido != null)?persona.dspapellido:"";
		    	persona.dssapellido			= (persona.dssapellido != null)?persona.dssapellido:"";
		    	persona.nombre				= persona.dspnombre     + " " + persona.dssnombre;
		    	persona.nombre				= persona.nombre.trim() + " " + persona.dspapellido + " " + persona.dssapellido;
			    personas[index] 			= persona;
			});
		    
		    if(personas != null && personas.length > 0) {
		    	var nombre					= personas[0].nombre;
		    	$scope.directornombre		= nombre;
		    	delete personas[index].nombre;
		       	$scope.nucleo.director		= personas[0];
		    } 
		    else {
		    	$scope.agregarPersona();
		    }
		};
		
		var error 							= function(respuesta) {
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar personas";
			divMessages.className 			= "alert alert-danger alert-dismissable";
			console.log(angular.toJson(respuesta));
		};
		
		var persona							= {
			dsidentificacion	: texto
		};
		
		if(texto != null && texto.length > 5) {
			smartOlwServices.sendPost(
				angular.toJson(persona),
				hostSmart+context+endPointPersona+methodGetPersona,exito,error
			);	
		}
	};
	
	$scope.agregarPersona		 = function() {
		$scope.cargaDialogo		 = true;
		var dialog 	 			 = ngDialog.open({
			template		: '/AplicacionEduWeb/vistas/smart_personas/smart_persona.html',
			scope			: $scope,
		    className		: 'ngdialog-theme-default custom-width',
		    controller		: "personaCtrl",
            closeByDocument	: false
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.buscarPais 			= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.paises,
				function(valor, item) {
					return (valor == item.scpais);
				});
	}
	
	$scope.buscarDepartamento 	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.departamentos,
			function(valor, item) {
				return (valor == item.scdepartamento);
			});
	}
	
	$scope.buscarCiudad 		= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.ciudades,
				function(valor, item) {
					return (valor == item.scciudad);
				});
	}
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 		= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarPaises 		= function() {
		try{
			var exito = function(respuesta){
				try{
					var paises 	= angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes = "Error!";
				$scope.descripcion_mensajes  = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className = "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes = "Error!";
			$scope.descripcion_mensajes  = "Se produjo un error al momento de consultar la información de paises";
			divMessages.className = "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos 	= function() {
		var pais			= $scope.pais;
		var departamento 	= {scpais : {scpais : pais}};
		try{
			var exito 		= function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , departamento ) {
						$scope.departamentos.push(departamento);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarCiudades = function() {
		var indepart	  = $scope.buscarDepartamento($scope.dsdepartamento);
		var cdepart		  = $scope.departamentos[indepart];
		var ciudadDTO  	  = {departamentodto : cdepart};
		try{
			var exito 	  = function(respuesta){
				try{
					$scope.ciudades 	= [];
					var ciudades 		= angular.fromJson(respuesta.data);
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
				}catch(e){
					console.log(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			}
			
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarPaises();
	
});